package com.wut.clock.service;

import com.wut.clock.dto.admin.MenuParams;
import com.wut.clock.entity.SysMenu;
import com.wut.clock.vo.admin.MenuVo;

import java.util.List;
import java.util.Set;

/**
 * @author ZYH
 * @unit D9Lab
 * @description 菜单接口
 * @date 2022/5/30 15:34
 */
public interface IMenuService {
    /**
     * 列出用户的菜单列表
     * @param userId 用户id
     * @return 菜单列表
     */
    List<MenuVo> listMenuVosByUserId(Integer userId);

    /**
     * 获取用户的权列表
     * @param userId 用户id
     * @return 权限列表
     */
    Set<String> getMenuPermsByUserId(Integer userId);

    /**
     * 根据用户id查菜单
     * @param userId 用户id
     * @return 菜单列表
     */
    List<SysMenu> listMenusByUserId(Integer userId);

    /**
     * 根据角色返回树形菜单给前端
     * @param roleId 角色id
     * @return 树形菜单
     */
    List<MenuVo> listMenuVosByRoleId(Integer roleId);

    /**
     * 添加主菜单
     * @param menuParams 菜单参数
     * @return 结果
     */
    int insertOneMenu(MenuParams menuParams);

    /**
     * 检查路径是否唯一
     * @param menuParams 菜单
     * @return 结果
     */
    boolean checkPathUnique(MenuParams menuParams);

    /**
     * 检查菜单名是否唯一
     * @param menuParams 菜单
     * @return 结果
     */
    boolean checkNameUnique(MenuParams menuParams);

    /**
     * 根据menuId删除菜单
     * @param menuId 菜单id
     * @return 结果
     */
    int deleteOneMenu(Integer menuId);

    /**
     * 更新某个菜单
     * @param menuParams 菜单参数
     * @return 结果
     */
    int updateMenu(MenuParams menuParams);

    /**
     * 获得所有树形菜单给前端
     */
    List<MenuVo> listMenuVos();
}
